{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from keras.datasets import imdb\n",
    "imdb.allow_pickle = True\n",
    "(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)\n",
    "# 仅保留前 1W 的单词"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1,\n",
       " 4,\n",
       " 65,\n",
       " 347,\n",
       " 16,\n",
       " 55,\n",
       " 730,\n",
       " 930,\n",
       " 5,\n",
       " 776,\n",
       " 8,\n",
       " 794,\n",
       " 5,\n",
       " 3887,\n",
       " 6,\n",
       " 176,\n",
       " 7,\n",
       " 57,\n",
       " 2,\n",
       " 212,\n",
       " 8,\n",
       " 6,\n",
       " 213,\n",
       " 121,\n",
       " 12,\n",
       " 43,\n",
       " 188,\n",
       " 357,\n",
       " 49,\n",
       " 7,\n",
       " 4,\n",
       " 311,\n",
       " 468,\n",
       " 8,\n",
       " 169,\n",
       " 12,\n",
       " 163,\n",
       " 21,\n",
       " 13,\n",
       " 40,\n",
       " 53,\n",
       " 1089,\n",
       " 486,\n",
       " 10,\n",
       " 10,\n",
       " 50,\n",
       " 71,\n",
       " 450,\n",
       " 573,\n",
       " 3923,\n",
       " 156,\n",
       " 11,\n",
       " 4,\n",
       " 20,\n",
       " 5,\n",
       " 68,\n",
       " 239,\n",
       " 71,\n",
       " 542,\n",
       " 1069,\n",
       " 4,\n",
       " 229,\n",
       " 4571,\n",
       " 2,\n",
       " 16,\n",
       " 52,\n",
       " 267,\n",
       " 17,\n",
       " 210,\n",
       " 10,\n",
       " 10,\n",
       " 13,\n",
       " 92,\n",
       " 377,\n",
       " 4,\n",
       " 204,\n",
       " 20,\n",
       " 38,\n",
       " 13,\n",
       " 191,\n",
       " 135,\n",
       " 48,\n",
       " 45,\n",
       " 128,\n",
       " 42,\n",
       " 433,\n",
       " 10,\n",
       " 10,\n",
       " 48,\n",
       " 25,\n",
       " 358,\n",
       " 102,\n",
       " 40,\n",
       " 2,\n",
       " 14,\n",
       " 20,\n",
       " 238,\n",
       " 30,\n",
       " 290,\n",
       " 656,\n",
       " 6,\n",
       " 168,\n",
       " 33]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_labels[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 限定了前10000个常见的词，所有的单词的索引都不超过10000。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "9999"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max([max(sequence) for sequence in train_data])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " 可以将评论转换成对应的英文原文：\n",
    " * 其中索引0，1，2的字符都是特殊字符"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "? the story line was very straight forward and easy to follow and contained a lot of no ? comedy to a point where it just got boring some of the audience seemed to find it funny but i like more intelligent humor br br there were several known swedish actors in the movie and their performance were decent considering the script lena ? was good looking as always br br i don't remember the original movie so i can't say if it's better or worse br br if you enjoy movies like ? this movie might be worth taking a look at\n"
     ]
    }
   ],
   "source": [
    "word_index = imdb.get_word_index()\n",
    "reverse_word_index = dict(\n",
    "    [(value, key) for [key, value] in word_index.items()])\n",
    "decoded_review = ' '.join([reverse_word_index.get(i-3, '?') for i in train_data[0]])\n",
    "print(decoded_review)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "def vectorize_sequences(sequences, dimension=10000):\n",
    "    results = np.zeros((len(sequences), dimension))\n",
    "    for i, sequence in enumerate(sequences):\n",
    "        results[i, sequence] = 1.\n",
    "    return results\n",
    "# 数据向量化\n",
    "x_train = vectorize_sequences(train_data)\n",
    "x_test = vectorize_sequences(test_data)\n",
    "# 标签向量化\n",
    "y_train = np.asarray(train_labels).astype('float32')\n",
    "y_test = np.asarray(test_labels).astype('float32')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 1., 1., ..., 0., 0., 0.])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 0., ..., 1., 0., 0.], dtype=float32)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "10000"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(x_train[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "实现一个 Dense 层的网络架构，包括以下层次：\n",
    "* 2个中间层，每层有16个隐藏单元，使用relu激活函数\n",
    "* 第3层 sigmod 输出一个标量，预测当前的情感"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras import models\n",
    "from keras import layers\n",
    "\n",
    "model = models.Sequential()\n",
    "model.add(layers.Dense(16, activation='relu', input_shape=(10000,)))\n",
    "model.add(layers.Dense(16, activation='relu'))\n",
    "model.add(layers.Dense(1, activation='sigmoid'))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:2921: The name tf.log is deprecated. Please use tf.math.log instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/tensorflow_core/python/ops/nn_impl.py:183: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use tf.where in 2.0, which has the same broadcast rule as np.where\n"
     ]
    }
   ],
   "source": [
    "model.compile(optimizer='rmsprop',\n",
    "             loss='binary_crossentropy',\n",
    "             metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "需要将数据留1w个作为验证集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_val = x_train[:10000]\n",
    "partial_x_train = x_train[10000:]\n",
    "\n",
    "y_val = y_train[:10000]\n",
    "partial_y_train = y_train[10000:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "分成512个样本的批次，训练20轮，并在留出的 1W 样本上验证精确度。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:671: calling Constant.__init__ (from tensorflow.python.ops.init_ops) with dtype is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Call initializer instance with the dtype argument instead of passing it to the constructor\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:949: The name tf.assign_add is deprecated. Please use tf.compat.v1.assign_add instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:936: The name tf.assign is deprecated. Please use tf.compat.v1.assign instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:2353: The name tf.Session is deprecated. Please use tf.compat.v1.Session instead.\n",
      "\n",
      "Train on 15000 samples, validate on 10000 samples\n",
      "Epoch 1/20\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:158: The name tf.get_default_session is deprecated. Please use tf.compat.v1.get_default_session instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:163: The name tf.ConfigProto is deprecated. Please use tf.compat.v1.ConfigProto instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:172: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:180: The name tf.is_variable_initialized is deprecated. Please use tf.compat.v1.is_variable_initialized instead.\n",
      "\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:187: The name tf.variables_initializer is deprecated. Please use tf.compat.v1.variables_initializer instead.\n",
      "\n",
      "15000/15000 [==============================] - 4s 288us/step - loss: 0.5105 - acc: 0.7841 - val_loss: 0.4131 - val_acc: 0.8348\n",
      "Epoch 2/20\n",
      "15000/15000 [==============================] - 2s 146us/step - loss: 0.3046 - acc: 0.9009 - val_loss: 0.3092 - val_acc: 0.8873\n",
      "Epoch 3/20\n",
      "15000/15000 [==============================] - 2s 143us/step - loss: 0.2254 - acc: 0.9286 - val_loss: 0.2878 - val_acc: 0.8906\n",
      "Epoch 4/20\n",
      "15000/15000 [==============================] - 2s 142us/step - loss: 0.1782 - acc: 0.9437 - val_loss: 0.2806 - val_acc: 0.8911\n",
      "Epoch 5/20\n",
      "15000/15000 [==============================] - 2s 141us/step - loss: 0.1447 - acc: 0.9566 - val_loss: 0.3046 - val_acc: 0.8825\n",
      "Epoch 6/20\n",
      "15000/15000 [==============================] - 2s 142us/step - loss: 0.1189 - acc: 0.9637 - val_loss: 0.3001 - val_acc: 0.8850\n",
      "Epoch 7/20\n",
      "15000/15000 [==============================] - 2s 144us/step - loss: 0.0988 - acc: 0.9711 - val_loss: 0.3333 - val_acc: 0.8780\n",
      "Epoch 8/20\n",
      "15000/15000 [==============================] - 2s 139us/step - loss: 0.0816 - acc: 0.9786 - val_loss: 0.3489 - val_acc: 0.8769\n",
      "Epoch 9/20\n",
      "15000/15000 [==============================] - 2s 140us/step - loss: 0.0667 - acc: 0.9829 - val_loss: 0.3861 - val_acc: 0.8737\n",
      "Epoch 10/20\n",
      "15000/15000 [==============================] - 2s 144us/step - loss: 0.0543 - acc: 0.9863 - val_loss: 0.3899 - val_acc: 0.8764\n",
      "Epoch 11/20\n",
      "15000/15000 [==============================] - 2s 149us/step - loss: 0.0444 - acc: 0.9900 - val_loss: 0.4162 - val_acc: 0.8751\n",
      "Epoch 12/20\n",
      "15000/15000 [==============================] - 2s 145us/step - loss: 0.0351 - acc: 0.9925 - val_loss: 0.4526 - val_acc: 0.8719\n",
      "Epoch 13/20\n",
      "15000/15000 [==============================] - 2s 141us/step - loss: 0.0274 - acc: 0.9954 - val_loss: 0.5033 - val_acc: 0.8645\n",
      "Epoch 14/20\n",
      "15000/15000 [==============================] - 2s 144us/step - loss: 0.0214 - acc: 0.9968 - val_loss: 0.5148 - val_acc: 0.8705\n",
      "Epoch 15/20\n",
      "15000/15000 [==============================] - 2s 140us/step - loss: 0.0188 - acc: 0.9959 - val_loss: 0.5474 - val_acc: 0.8697\n",
      "Epoch 16/20\n",
      "15000/15000 [==============================] - 2s 141us/step - loss: 0.0128 - acc: 0.9981 - val_loss: 0.5773 - val_acc: 0.8694\n",
      "Epoch 17/20\n",
      "15000/15000 [==============================] - 2s 145us/step - loss: 0.0103 - acc: 0.9987 - val_loss: 0.6104 - val_acc: 0.8672\n",
      "Epoch 18/20\n",
      "15000/15000 [==============================] - 2s 150us/step - loss: 0.0089 - acc: 0.9985 - val_loss: 0.6430 - val_acc: 0.8653\n",
      "Epoch 19/20\n",
      "15000/15000 [==============================] - 2s 148us/step - loss: 0.0045 - acc: 0.9999 - val_loss: 0.6794 - val_acc: 0.8645\n",
      "Epoch 20/20\n",
      "15000/15000 [==============================] - 2s 141us/step - loss: 0.0062 - acc: 0.9991 - val_loss: 0.7013 - val_acc: 0.8647\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(partial_x_train,\n",
    "                   partial_y_train,\n",
    "                   epochs=20,\n",
    "                   batch_size=512,\n",
    "                   validation_data=(x_val, y_val))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "fit函数会返回一个训练过程的记录：history对象。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['val_loss', 'val_acc', 'loss', 'acc'])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history_dict = history.history\n",
    "history_dict.keys()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "画出训练损失&验证损失图："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "loss_values = history_dict['loss']\n",
    "val_loss_values = history_dict['val_loss']\n",
    "\n",
    "epochs = range(1, len(loss_values) + 1)\n",
    "\n",
    "plt.plot(epochs, loss_values, 'bo', label='Training Loss')\n",
    "plt.plot(epochs, val_loss_values, 'b', label='Validation Loss')\n",
    "plt.title('Training and Validation loss')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "画出训练精度和验证精度图形："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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2UKfPn0AeOmllyoVqXXq1IlnnnmGo446asc6megSvNnXQWT62bgikh8jR45kxowZvPnmm2zatImDDz4YCJ3frV69mjlz5jB37lz22muvenWt/cEHH/DrX/+aGTNmMG/ePL773e+m1UV3oqtwqL678AkTJnDppZcyf/587rvvvpx3Cd6sE0Ti2bgffgjuO5+NqyQh0vi0a9eOY489lnHjxlWqnN6wYQN77rknLVu2ZObMmdTWqedRRx3Fo48+CsCCBQuYN28eELoKb9u2LR06dGDVqlU899xzO7Zp3749X3zxxS77OvLII/nTn/7Epk2b+PLLL3nqqac48sgjU/5MGzZsoHv37gA8/PDDO+afeOKJ3HvvvTum161bx6GHHsqsWbP44IMPgMx0Cd6sE0Qun40rItk3ZswYysrKKiWIsWPHUlpayoEHHsgjjzxC//79a9zHxRdfzMaNG9l///254YYbdlyJDB48mCFDhtC/f3++973vVeoqfPz48QwfPpxjjz220r6GDh3K+eefz7BhwzjkkEO48MILGTJkSMqf56abbuLMM8/k4IMPrlS/cd1117Fu3ToOOOAABg8ezMyZM+natSuTJk1i1KhRDB48mLPPPjvl96lO1rr7zrWSkhKvra1yVQUF4cqhKjPYvj1DgYk0A+ruu3Goa3ffzfoKItfPxhURaUyadYLI9bNxRUQak2adIPL5bFyRpqapFFc3VfX5+zT7+yDy9WxckaaksLCQtWvXUlRUVO0NaJI/7s7atWspLCys03bNPkGISPp69OhBeXk5q1evzncoUo3CwkJ69OhRp22UIEQkbS1bttxxB680Hc26DkJERKqnBCEiIrGUIEREJFaTuZPazFYDNXeykl9dgDX5DqIGii89ii89ii896cTX2927xi1oMgmioTOz0upuZ28IFF96FF96FF96shWfiphERCSWEoSIiMRSgsidSfkOoBaKLz2KLz2KLz1ZiU91ECIiEktXECIiEksJQkREYilBZIiZ9TSzmWa20MzeNrPLY9Y5xsw2mNncaLghD3EuM7P50fvv8gg+C+42syVmNs/MhuYwtv2Sjs1cM/vczH5cZZ2cHkMzm2xmn5rZgqR5nc3sRTNbHL12qmbb86J1FpvZeTmM71dm9m7093vKzDpWs22N34UsxneTmS1P+huOqGbb4Wa2KPouXp3D+B5Pim2Zmc2tZttcHL/Y80rOvoPuriEDA7A3MDQabw+8Bwyoss4xwF/yHOcyoEsNy0cAzwEGHAq8nqc4WwCfEG7iydsxBI4ChgILkubdDlwdjV8N/DJmu87A0ui1UzTeKUfxnQTsFo3/Mi6+VL4LWYzvJuDKFP7+7wP7AK2Asqr/T9mKr8ryO4Ab8nj8Ys8rufoO6goiQ9x9pbu/GY1/AbwDdM9vVPUyEnjEg9eAjma2dx7iOB54393zene8u88CPqsyeyTwcDT+MPAvMZt+B3jR3T9z93XAi8DwXMTn7n9194po8jWgbn08Z1A1xy8Vw4Al7r7U3bcAUwnHPaNqis/Cgy3OAh7L9PumqobzSk6+g0oQWWBmxcAQ4PWYxYeZWZmZPWdmA3MaWODAX81sjpmNj1neHfg4abqc/CS6c6j+HzPfx3Avd18ZjX8C7BWzTkM5juMIV4RxavsuZNOlURHY5GqKRxrC8TsSWOXui6tZntPjV+W8kpPvoBJEhplZO2A68GN3/7zK4jcJRSaDgXuAP+U6PuAIdx8KnAxcYmZH5SGGGplZK+A04ImYxQ3hGO7g4Vq+QbYVN7NrgQpgSjWr5Ou78FugL3AQsJJQjNMQjaHmq4ecHb+azivZ/A4qQWSQmbUk/BGnuPsfqy5398/dfWM0/izQ0sy65DJGd18evX4KPEW4lE+2HOiZNN0jmpdLJwNvuvuqqgsawjEEViWK3aLXT2PWyetxNLPzgVOAsdEJZBcpfBeywt1Xufs2d98O3F/N++b7+O0GjAIer26dXB2/as4rOfkOKkFkSFRe+SDwjrvfWc063aL1MLNhhOO/NocxtjWz9olxQmXmgiqrPQ2cG7VmOhTYkHQpmyvV/nLL9zGMPA0kWoScB/w5Zp0XgJPMrFNUhHJSNC/rzGw4cBVwmrtvqmadVL4L2YovuU7r9GredzbQz8z6RFeU5xCOe66cALzr7uVxC3N1/Go4r+TmO5jNGvjmNABHEC7z5gFzo2EEcBFwUbTOpcDbhBYZrwHfznGM+0TvXRbFcW00PzlGA+4ltCCZD5TkOMa2hBN+h6R5eTuGhES1EthKKMP9IVAEzAAWAy8BnaN1S4AHkrYdByyJhgtyGN8SQtlz4nv4P9G63wCerem7kKP4fh99t+YRTnR7V40vmh5BaLXzfi7ji+Y/lPjOJa2bj+NX3XklJ99BdbUhIiKxVMQkIiKxlCBERCSWEoSIiMRSghARkVhKECIiEksJQqQWZrbNKvcym7GeRc2sOLknUZGGZLd8ByDSCGx294PyHYRIrukKQqSeoucB3B49E+ANM9s3ml9sZn+LOqObYWa9ovl7WXg+Q1k0fDvaVQszuz/q7/+vZtY6Wv+y6DkA88xsap4+pjRjShAitWtdpYjp7KRlG9z9QOA3wMRo3j3Aw+4+iNBR3t3R/LuBf3joaHAo4Q5cgH7Ave4+EFgPnBHNvxoYEu3nomx9OJHq6E5qkVqY2UZ3bxczfxlwnLsvjTpU+8Tdi8xsDaH7iK3R/JXu3sXMVgM93P3rpH0UE/rs7xdN/wxo6e63mtnzwEZCj7V/8qiTQpFc0RWESHq8mvG6+DppfBs76wa/S+gXaygwO+phVCRnlCBE0nN20us/o/FXCb2PAowFXo7GZwAXA5hZCzPrUN1OzawA6OnuM4GfAR2AXa5iRLJJv0hEatfaKj+4/nl3TzR17WRm8whXAWOieROA35nZT4HVwAXR/MuBSWb2Q8KVwsWEnkTjtAD+ECURA+529/UZ+0QiKVAdhEg9RXUQJe6+Jt+xiGSDiphERCSWriBERCSWriBERCSWEoSIiMRSghARkVhKECIiEksJQkREYv1/hij7Le/Gp0EAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "acc = history_dict['acc']\n",
    "val_acc = history_dict['val_acc']\n",
    "\n",
    "plt.plot(epochs, acc, 'bo', label='Training acc')\n",
    "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
    "plt.title('Training and Validation accuracy')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "效果并不是越来越好，后续都过拟合了，将轮数下降到4轮："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 25000 samples, validate on 10000 samples\n",
      "Epoch 1/4\n",
      "25000/25000 [==============================] - 3s 118us/step - loss: 0.0229 - acc: 0.9950 - val_loss: 0.0286 - val_acc: 0.9944\n",
      "Epoch 2/4\n",
      "25000/25000 [==============================] - 3s 117us/step - loss: 0.0190 - acc: 0.9960 - val_loss: 0.0227 - val_acc: 0.9970\n",
      "Epoch 3/4\n",
      "25000/25000 [==============================] - 3s 117us/step - loss: 0.0122 - acc: 0.9984 - val_loss: 0.0176 - val_acc: 0.9980\n",
      "Epoch 4/4\n",
      "25000/25000 [==============================] - 3s 117us/step - loss: 0.0105 - acc: 0.9985 - val_loss: 0.0149 - val_acc: 0.9984\n",
      "25000/25000 [==============================] - 1s 45us/step\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(x_train, y_train, epochs=4, batch_size=512, validation_data=(x_val, y_val))\n",
    "results = model.evaluate(x_test, y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.8913023912119865, 0.8514]"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "history_dict = history.history\n",
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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SXZ2drrDcM65MkVSgStDePeXc865pPGk4pxzLmk8qTjnnEuaCj2m4pxLve+++441a9awffv2dIfiiqh69eo0bdqUjIyMhM/xpOKcS6k1a9ZQq1YtMjMzCQtCu7LAzNi4cSNr1qyhRYvEF3n27i/nXEpt376devXqeUIpYyRRr169IrcwPak451LOE0rZVJzPzZNKMbz/Ptx4I3gXsXPO7cmTSjG88AKMGgUdOsDMmemOxjlXmI0bN9KpUyc6derEQQcdRJMmTXZt79ixI6E6zj33XD744INCj7nvvvsYN25cMkLmmGOOYeHChUmpq6R5UimGa6+F6dPh++/hhBPg/PPhiy/SHZVz5cO4cZCZCZUqha/7+nu6Xr16LFy4kIULF/Kb3/yGK6+8ctd21apVgTAo/cMPPxRYx2OPPcZhhx1W6Pe5+OKLGTJkyL4FWw54UimmE0+EJUvguuvg8cehdWuYMAF80Wfnim/cOBg+HFavDv+XVq8O20lqAOwhJyeHNm3aMGTIENq2bcv69esZPnw4WVlZtG3blltuuWXXsXkth507d1K3bl1GjhxJx44dOfLII/n8888B+P3vf8+YMWN2HT9y5Ei6devGYYcdxltvvQXA1q1bGTBgAG3atGHgwIFkZWUl3CL55ptvOOecc2jfvj1dunRh1qxZACxZsoSf//zndOrUiQ4dOrBy5Uo2b95M79696dixI+3atWPy5L0+cDRpPKnsgxo14LbbIDsbmjeHX/8aTjkFVq1Kd2TOlU033ADbtu1Ztm1bKE+F999/nyuvvJJly5bRpEkTbrvtNrKzs1m0aBHTp09n2bJlPzpn06ZNHHfccSxatIgjjzySRx99NG7dZsbcuXP561//uitB3XPPPRx00EEsW7aMG2+8kXfffTfhWO+++26qVavGkiVLePLJJxk6dCg7duzg/vvv55prrmHhwoXMmzePxo0b89JLL5GZmcmiRYt47733OOmkk4r3AyoGTypJ0KkTvPMOjBkDs2ZB27Zw552wc2e6I3OubPm4gCfJF1S+r372s5+RlZW1a3vChAl06dKFLl26sHz58rhJZb/99qN3794AdO3alVUF/BX5y1/+8kfHzJ49m0GDBgHQsWNH2rZtm3Css2fP5qyzzgKgbdu2NG7cmJycHI466ihGjRrFX/7yFz755BOqV69Ohw4deOWVVxg5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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "loss_values = history_dict['loss']\n",
    "val_loss_values = history_dict['val_loss']\n",
    "\n",
    "epochs = range(1, len(loss_values) + 1)\n",
    "\n",
    "plt.plot(epochs, loss_values, 'bo', label='Training Loss')\n",
    "plt.plot(epochs, val_loss_values, 'b', label='Validation Loss')\n",
    "plt.title('Training and Validation loss')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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OCB0mPfqtaP20aRJKHd7z2sqRUz37t35z3/+kzsh1+LFi1m2bBknnnhi7nMjLVu25Oijj+bNN9/81f6LFy+mSZMmQBhCpWfPnhx11FF07do1d2gUgP79++cOm3/nnXcC8Nhjj7Fs2TLat29P+/btAahfvz6rVq0CYMiQITRp0oQmTZrkDpu/ePFijjrqKC677DIaN27MqaeeutN5cowfP57WrVvTokULTjnlFFasWAGEZ2Euvvhijj76aJo2bZo7zMtbb71Fy5YtadasGSeffHJCfreu5Fq1Ct55Bx54AM4/PzwcWLEi/P73cOWVoZZRuTJcfXWYmmL+/NDp/vHH8OSTYfDLY4/1hJIIXlPZjeuuC510idS8OUTfx/k6+OCDadWqFRMnTqRLly6MHj2a8847D0mUK1eON954g4MOOohVq1bRpk0bOnfuvMv52p988knKly/PF198wZw5c2jZsmXuukGDBnHwwQezbds2Tj75ZObMmcM111zDkCFDmDJlCtWqVdvpWDNmzOCf//wnn3zyCWZG69atadu2LVWqVOHrr79m1KhRPPPMM5x33nmMGTOGPn367LT/CSecwMcff4wknn32WR544AEefvhh7r77bipVqsTnn38OwJo1a1i5ciWXXXYZU6dOpUGDBj4+mMtlFpqn8vZ/ZGXt2KZOnVDr6NFjRw2kTh1vriosnlSKoJwmsJyk8txzzwFhzpPbb7+dqVOnst9++7F06VJWrFhBzV08MTV16lSuueYaAJo2bUrTpk1z173yyisMGzaM7Oxsli9fzvz583dan9cHH3xA165dc0dK7tatG9OmTaNz5840aNCA5s2bAzsPnR8rKyuLHj16sHz5cn755RcaNGgAhKHwR48enbtdlSpVGD9+PCeddFLuNj48fumUnQ1fffXrIdzXrAnr99sPjjgCTjppR/Jo3hyqVk1t3KVdUpOKpE7Ao4TpfZ81s/vyrK9HmO2xOvAjYTKurGjd/cAZ0aZ3m9nLUfnJwIOEprsNQF8zWyipLPACcAywGuhhZov3Jf7d1SiSqUuXLlx//fV89tlnbNq0iWOOOQYIAzSuXLmSGTNmkJ6eTv369fdqmPlvvvmGhx56iOnTp1OlShX69u27T8PVl425CT8tLS3f5q+rr76aG264gc6dO/P+++9z11137fX5XMmzeTN8/vnOCWTOHMj5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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "acc = history_dict['acc']\n",
    "val_acc = history_dict['val_acc']\n",
    "\n",
    "plt.plot(epochs, acc, 'bo', label='Training acc')\n",
    "plt.plot(epochs, val_acc, 'b', label='Validation acc')\n",
    "plt.title('Training and Validation accuracy')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 从上述结果可以看到训练结果：85.8%精确度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "sure:78.56%\n",
      "not sure:21.44%\n"
     ]
    }
   ],
   "source": [
    "predict_data = model.predict(x_test)\n",
    "sure_count = 0\n",
    "not_sure_count = 0\n",
    "for i in predict_data:\n",
    "    if i < 0.01 or i > 0.99:\n",
    "        sure_count += 1\n",
    "    else:\n",
    "        not_sure_count += 1\n",
    "print('sure:' + str(sure_count / len(predict_data) * 100 ) + '%')\n",
    "print('not sure:' + str(not_sure_count / len(predict_data) * 100 ) + '%')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看出，对部分结果比较确定：大于0.99或小于0.01，但是部分又不确定。78%的确定（大于0.99或小于0.01），21%不确定。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
